<!DOCTYPE html>


















































<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <meta name="description" content="Javadoc API documentation for org.eclipse.sisu.inject." />

<!-- <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.ico" /> -->
<title>

  Mediator


| org.eclipse.sisu.inject

</title>
<link href="../../../../assets/doclava-developer-docs.css" rel="stylesheet" type="text/css" />
<link href="../../../../assets/customizations.css" rel="stylesheet" type="text/css" />
<script src="../../../../assets/search_autocomplete.js" type="text/javascript"></script>
<script src="../../../../assets/jquery-resizable.min.js" type="text/javascript"></script>
<script src="../../../../assets/doclava-developer-docs.js" type="text/javascript"></script>
<script src="../../../../assets/prettify.js" type="text/javascript"></script>
<script type="text/javascript">
  setToRoot("../../../", "../../../../assets/");
</script>
<script src="../../../../assets/doclava-developer-reference.js" type="text/javascript"></script>
<script src="../../../../assets/navtree_data.js" type="text/javascript"></script>
<script src="../../../../assets/customizations.js" type="text/javascript"></script>
<noscript>
  <style type="text/css">
    html,body{overflow:auto;}
    #body-content{position:relative; top:0;}
    #doc-content{overflow:visible;border-left:3px solid #666;}
    #side-nav{padding:0;}
    #side-nav .toggle-list ul {display:block;}
    #resize-packages-nav{border-bottom:3px solid #666;}
  </style>
</noscript>
</head>

<body class="">

<div id="header">
    <div id="headerLeft">
    
      <span id="masthead-title">org.eclipse.sisu.inject</span>
    
    </div>
    <div id="headerRight">
      
  <div id="search" >
      <div id="searchForm">
          <form accept-charset="utf-8" class="gsc-search-box" 
                onsubmit="return submit_search()">
            <table class="gsc-search-box" cellpadding="0" cellspacing="0"><tbody>
                <tr>
                  <td class="gsc-input">
                    <input id="search_autocomplete" class="gsc-input" type="text" size="33" autocomplete="off"
                      title="search developer docs" name="q"
                      value="search developer docs"
                      onFocus="search_focus_changed(this, true)"
                      onBlur="search_focus_changed(this, false)"
                      onkeydown="return search_changed(event, true, '../../../')"
                      onkeyup="return search_changed(event, false, '../../../')" />
                  <div id="search_filtered_div" class="no-display">
                      <table id="search_filtered" cellspacing=0>
                      </table>
                  </div>
                  </td>
                  <td class="gsc-search-button">
                    <input type="submit" value="Search" title="search" id="search-button" class="gsc-search-button" />
                  </td>
                  <td class="gsc-clear-button">
                    <div title="clear results" class="gsc-clear-button">&nbsp;</div>
                  </td>
                </tr></tbody>
              </table>
          </form>
      </div><!-- searchForm -->
  </div><!-- search -->
      
    </div>
</div><!-- header -->


  <div class="g-section g-tpl-240" id="body-content">
    <div class="g-unit g-first side-nav-resizable" id="side-nav">
      <div id="swapper">
        <div id="nav-panels">
          <div id="resize-packages-nav">
            <div id="packages-nav">
              <div id="index-links">
                <a href="../../../packages.html"  >Package Index</a> | 
                <a href="../../../classes.html" >Class Index</a>
              </div>
              <ul>
                
    <li class="selected api apilevel-">
  <a href="../../../org/eclipse/sisu/package-summary.html">org.eclipse.sisu</a></li>
    <li class="api apilevel-">
  <a href="../../../org/eclipse/sisu/bean/package-summary.html">org.eclipse.sisu.bean</a></li>
    <li class="api apilevel-">
  <a href="../../../org/eclipse/sisu/inject/package-summary.html">org.eclipse.sisu.inject</a></li>
    <li class="api apilevel-">
  <a href="../../../org/eclipse/sisu/launch/package-summary.html">org.eclipse.sisu.launch</a></li>
    <li class="api apilevel-">
  <a href="../../../org/eclipse/sisu/osgi/package-summary.html">org.eclipse.sisu.osgi</a></li>
    <li class="api apilevel-">
  <a href="../../../org/eclipse/sisu/space/package-summary.html">org.eclipse.sisu.space</a></li>
    <li class="api apilevel-">
  <a href="../../../org/eclipse/sisu/wire/package-summary.html">org.eclipse.sisu.wire</a></li>
    <li class="api apilevel-">
  <a href="../../../org/sonatype/inject/package-summary.html">org.sonatype.inject</a></li>
              </ul><br/>
            </div> <!-- end packages -->
          </div> <!-- end resize-packages -->
          <div id="classes-nav">
            <ul>
              
    <li><h2>Interfaces</h2>
      <ul>
          <li class="api apilevel-"><a href="../../../org/eclipse/sisu/BeanEntry.html">BeanEntry</a>&lt;Q&nbsp;extends&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/index.html?java/lang/annotation/Annotation.html">Annotation</a>,&nbsp;T&gt;</li>
          <li class="selected api apilevel-"><a href="../../../org/eclipse/sisu/Mediator.html">Mediator</a>&lt;Q&nbsp;extends&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/index.html?java/lang/annotation/Annotation.html">Annotation</a>,&nbsp;T,&nbsp;W&gt;</li>
      </ul>
    </li>
              
              
    <li><h2>Annotations</h2>
      <ul>
          <li class="api apilevel-"><a href="../../../org/eclipse/sisu/Description.html">Description</a></li>
          <li class="api apilevel-"><a href="../../../org/eclipse/sisu/Dynamic.html">Dynamic</a></li>
          <li class="api apilevel-"><a href="../../../org/eclipse/sisu/EagerSingleton.html">EagerSingleton</a></li>
          <li class="api apilevel-"><a href="../../../org/eclipse/sisu/Hidden.html">Hidden</a></li>
          <li class="api apilevel-"><a href="../../../org/eclipse/sisu/Nullable.html">Nullable</a></li>
          <li class="api apilevel-"><a href="../../../org/eclipse/sisu/Parameters.html">Parameters</a></li>
          <li class="api apilevel-"><a href="../../../org/eclipse/sisu/Priority.html">Priority</a></li>
          <li class="api apilevel-"><a href="../../../org/eclipse/sisu/Typed.html">Typed</a></li>
      </ul>
    </li>
              
              
              
            </ul><br/>
          </div><!-- end classes -->
        </div><!-- end nav-panels -->
        <div id="nav-tree" style="display:none">
          <div id="index-links">
            <a href="../../../packages.html"  >Package Index</a> | 
            <a href="../../../classes.html" >Class Index</a>
          </div>
        </div><!-- end nav-tree -->
      </div><!-- end swapper -->
    </div> <!-- end side-nav -->
    <script>
      if (!isMobile) {
        <!-- $("<a href='#' id='nav-swap' onclick='swapNav();return false;' style='font-size:10px;line-height:9px;margin-left:1em;text-decoration:none;'><span id='tree-link'>Use Tree Navigation</span><span id='panel-link' style='display:none'>Use Panel Navigation</span></a>").appendTo("#side-nav"); -->
        chooseDefaultNav();
        if ($("#nav-tree").is(':visible')) {
          init_default_navtree("../../../");
        } else {
          addLoadEvent(function() {
            scrollIntoView("packages-nav");
            scrollIntoView("classes-nav");
          });
        }
        $("#swapper").css({borderBottom:"2px solid #aaa"});
      } else {
        swapNav(); // tree view should be used on mobile
      }
    </script>



<div class="g-unit" id="doc-content">

<div id="api-info-block">




<div class="sum-details-links">


</div><!-- end sum-details-links -->
<div class="api-level">
  


  
  

</div>
</div><!-- end api-info-block -->


<!-- ======== START OF CLASS DATA ======== -->

<div id="jd-header">
    public
     
     
    
    interface
<h1>Mediator</h1>



  
  
  


</div><!-- end header -->

<div id="naMessage"></div>

<div id="jd-content" class="api apilevel-">
<table class="jd-inheritance-table">


    <tr>
         	
        <td colspan="1" class="jd-inheritance-class-cell">org.eclipse.sisu.Mediator&lt;Q&nbsp;extends&nbsp;<a href="http://docs.oracle.com/javase/6/docs/api/index.html?java/lang/annotation/Annotation.html">java.lang.annotation.Annotation</a>,&nbsp;T,&nbsp;W&gt;</td>
    </tr>
    

</table>







<div class="jd-descr">


<h2>Class Overview</h2>
<p>Watches for Qualified bean implementations of T:<br>
 <br>
 
 <pre>
 // add @Named for automatic registration
 public class MyMediator
     implements Mediator&lt;Named, MyType, MyWatcher&gt;
 {
     public void add( BeanEntry&lt;Named, MyType&gt; entry, MyWatcher watcher )
         throws Exception
     {
         // translate event to whatever the watcher expects
     }
 
     public void remove( BeanEntry&lt;Named, MyType&gt; entry, MyWatcher watcher )
         throws Exception
     {
         // translate event to whatever the watcher expects
     }
 }
 </pre>
 
 Mediator implementations must have a public no-arg constructor; they are neither injected nor injectable, acting
 instead as stateless translators.
 <p>
 <p>
 IMPORTANT: mediation occurs when bindings change and there is at least <b>one</b> live watcher. If no-one requests or
 injects an instance of the watcher type then the mediator will <b>not</b> be called.
 <p>
 <p>
 In the following example as soon as MyTabbedPane is injected, Sisu will use the SwingTabMediator to deliver all known
 JPanels annotated with @Tab to the watching MyTabbedPane. Sisu will continue to send updates, which add or remove
 tabs as appropriate, until the MyTabbedPane instance becomes unreachable. MyTabbedPane doesn't need to know anything
 about Sisu APIs and vice-versa because SwingTabMediator takes care of the necessary translation.
 
 <pre>
 &#064;Named
 public class MyTabbedPane
     extends JTabbedPane
 {
     // watcher
 }
 
 &#064;Qualifier
 &#064;Retention( RetentionPolicy.RUNTIME )
 public @interface Tab
 {
     String title();
 }
 
 &#064;Tab( title = &quot;Summary&quot; )
 public class SummaryTab
     extends JPanel
 {
     // qualified bean
 }
 
 &#064;Tab( title = &quot;Notes&quot; )
 public class NotesTab
     extends JPanel
 {
     // qualified bean
 }
 
 &#064;Named
 public class SwingTabMediator
     implements Mediator&lt;Tab, JPanel, MyTabbedPane&gt;
 {
     public void add( BeanEntry&lt;Tab, JPanel&gt; entry, final MyTabbedPane watcher )
         throws Exception
     {
         final Tab tab = entry.getKey();
         final JPanel panel = entry.getValue();
 
         SwingUtilities.invokeLater( new Runnable()
         {
             public void run()
             {
                 watcher.addTab( tab.title(), panel );
             }
         } );
     }
 
     public void remove( BeanEntry&lt;Tab, JPanel&gt; entry, final MyTabbedPane watcher )
         throws Exception
     {
         final Tab tab = entry.getKey();
 
         SwingUtilities.invokeLater( new Runnable()
         {
             public void run()
             {
                 watcher.removeTabAt( watcher.indexOfTab( tab.title() ) );
             }
         } );
     }
 }
 </pre></p>



  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">See Also</h5>
      <ul class="nolist"><li><code><a href="../../../org/eclipse/sisu/inject/BeanLocator.html">BeanLocator</a></code></li>
      </ul>
  </div>


</div><!-- jd-descr -->
















<div class="jd-descr">


<h2>Summary</h2>



























<!-- ========== METHOD SUMMARY =========== -->
<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr>



	 
    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol">
            abstract
            
            
            
            
            void
        </td>
        <td class="jd-linkcol" width="100%">
        <span class="sympad"><a href="../../../org/eclipse/sisu/Mediator.html#add(org.eclipse.sisu.BeanEntry<Q, T>, W)">add</a></span>(<a href="../../../org/eclipse/sisu/BeanEntry.html">BeanEntry</a>&lt;Q,&nbsp;T&gt; entry, W watcher)
        
        <div class="jd-descrdiv">Processes the added <code><a href="../../../org/eclipse/sisu/BeanEntry.html">BeanEntry</a></code> and sends the necessary updates to the watcher.</div>
  
  </td></tr>


	 
    <tr class=" api apilevel-" >
        <td class="jd-typecol">
            abstract
            
            
            
            
            void
        </td>
        <td class="jd-linkcol" width="100%">
        <span class="sympad"><a href="../../../org/eclipse/sisu/Mediator.html#remove(org.eclipse.sisu.BeanEntry<Q, T>, W)">remove</a></span>(<a href="../../../org/eclipse/sisu/BeanEntry.html">BeanEntry</a>&lt;Q,&nbsp;T&gt; entry, W watcher)
        
        <div class="jd-descrdiv">Processes the removed <code><a href="../../../org/eclipse/sisu/BeanEntry.html">BeanEntry</a></code> and sends the necessary updates to the watcher.</div>
  
  </td></tr>



</table>







</div><!-- jd-descr (summary) -->

<!-- Details -->








<!-- XML Attributes -->


<!-- Enum Values -->


<!-- Constants -->


<!-- Fields -->


<!-- Public ctors -->



<!-- ========= CONSTRUCTOR DETAIL ======== -->
<!-- Protected ctors -->



<!-- ========= METHOD DETAIL ======== -->
<!-- Public methdos -->

<h2>Public Methods</h2>



<a id="add(org.eclipse.sisu.BeanEntry<Q, T>, W)"></a>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
         
         
        abstract 
         
        void
      </span>
      <span class="sympad">add</span>
      <span class="normal">(<a href="../../../org/eclipse/sisu/BeanEntry.html">BeanEntry</a>&lt;Q,&nbsp;T&gt; entry, W watcher)</span>
    </h4>
      <div class="api-level">
        <div>

</div>
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Processes the added <code><a href="../../../org/eclipse/sisu/BeanEntry.html">BeanEntry</a></code> and sends the necessary updates to the watcher.</p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Parameters</h5>
      <table class="jd-tagtable">
        <tr>
          <th>entry</th>
          <td>The added bean entry</td>
        </tr>
        <tr>
          <th>watcher</th>
          <td>The watching object
</td>
        </tr>
      </table>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Throws</h5>
      <table class="jd-tagtable">  
        <tr>
            <th><a href="http://docs.oracle.com/javase/6/docs/api/index.html?java/lang/Exception.html">Exception</a></td>
            <td></td>
        </tr>
      </table>
  </div>

    </div>
</div>


<a id="remove(org.eclipse.sisu.BeanEntry<Q, T>, W)"></a>

<div class="jd-details api apilevel-"> 
    <h4 class="jd-details-title">
      <span class="normal">
        public 
         
         
        abstract 
         
        void
      </span>
      <span class="sympad">remove</span>
      <span class="normal">(<a href="../../../org/eclipse/sisu/BeanEntry.html">BeanEntry</a>&lt;Q,&nbsp;T&gt; entry, W watcher)</span>
    </h4>
      <div class="api-level">
        <div>

</div>
        
  

      </div>
    <div class="jd-details-descr">
      
  <div class="jd-tagdata jd-tagdescr"><p>Processes the removed <code><a href="../../../org/eclipse/sisu/BeanEntry.html">BeanEntry</a></code> and sends the necessary updates to the watcher.</p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Parameters</h5>
      <table class="jd-tagtable">
        <tr>
          <th>entry</th>
          <td>The removed bean entry</td>
        </tr>
        <tr>
          <th>watcher</th>
          <td>The watching object
</td>
        </tr>
      </table>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Throws</h5>
      <table class="jd-tagtable">  
        <tr>
            <th><a href="http://docs.oracle.com/javase/6/docs/api/index.html?java/lang/Exception.html">Exception</a></td>
            <td></td>
        </tr>
      </table>
  </div>

    </div>
</div>





<!-- ========= METHOD DETAIL ======== -->



<!-- ========= END OF CLASS DATA ========= -->
<a id="navbar_top"></a>

<div id="footer">
Generated by <a href="http://code.google.com/p/doclava/">Doclava</a>.
</div> <!-- end footer -->

</div> <!-- jd-content -->

</div><!-- end doc-content -->

</div> <!-- end body-content --> 

<script type="text/javascript">
init(); /* initialize doclava-developer-docs.js */
</script>

</body>
</html>
